/*
 * Nome do arquivo: RecebeDadoscolaborador.java
 * Autores:	Bruno Villas Bôas           - 317527
 *              Diego Zamboni               - 344990
 *              Endel Guimarães             - 379930
 * 		Guilherme Torres            - 400572
 *		Renan Oliveira              - 380113
 * 
 * Turma: 2012/1
 *
 * Descricao: Servlet responsável pelo gerenciamento de colaboradores
 *
 * Data de conclusao: 
*/

package cooper.classes.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.sun.jmx.remote.internal.ArrayQueue;
import cooper.classes.bean.ColaboradorBean;
import cooper.classes.bean.UsuarioBean;
import cooper.classes.dao.CooperDAOException;
import cooper.classes.dao.ColaboradorDAO;
import cooper.classes.dao.UsuarioDAO;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpSession;

public class RecebeDadosColaborador extends HttpServlet {
    
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
    {
        String acao = request.getParameter("acao");
        
        if (acao.compareTo("cadastrar") == 0) 
        {
            try {
                acaoCadastrar(request, response);
            } catch (CooperDAOException ex) {
                Logger.getLogger(RecebeDadosColaborador.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else if(acao.compareTo("alterar") == 0)
        {
            try {
                acaoAlterar(request, response);
            } catch (CooperDAOException ex) {
                Logger.getLogger(RecebeDadosColaborador.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else if(acao.compareTo("remover") == 0)
        {
            try {
                acaoRemover(request, response);
            } catch (CooperDAOException ex) {
                Logger.getLogger(RecebeDadosColaborador.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else if(acao.compareTo("consultar") == 0) 
        {
            String nome = request.getParameter("keyword");
            acaoConsultar(request, response, nome);
        }
    }
    
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException 
    {
        String acao = request.getParameter("acao");

        if(acao.compareTo("remover") == 0)
        {
            try {
                acaoRemover(request, response);
            } catch (CooperDAOException ex) {
                Logger.getLogger(RecebeDadosColaborador.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        else if(acao.compareTo("consultar") == 0) 
        {
            String nome = request.getParameter("keyword");
            acaoConsultar(request, response, nome);
        }
    }
    
    private void acaoCadastrar(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException, CooperDAOException 
    {
        ColaboradorBean objColaborador = new ColaboradorBean();     
        objColaborador.setNome(request.getParameter("nome"));
        objColaborador.setProfissao(request.getParameter("profissao"));
        objColaborador.setRua(request.getParameter("rua"));
        objColaborador.setNumero(request.getParameter("numero"));
        objColaborador.setBairro(request.getParameter("bairro"));
        objColaborador.setCidade(request.getParameter("cidade"));
        objColaborador.setEstado(request.getParameter("estado"));
        objColaborador.setEmail(request.getParameter("email"));
        objColaborador.setTelefone(request.getParameter("telefone"));

        String html="";

        // Instanciando a colaborador e permitindo que ela seja vista na view
        try 
        {
            ColaboradorDAO entidade = new ColaboradorDAO();
            
            int idUsuario = entidade.cadastrar(objColaborador);
            
            //ajusta id colaborador
            objColaborador.setId(idUsuario);
            
            UsuarioBean objUsuario = new UsuarioBean();     
            objUsuario.setUsuario(request.getParameter("usuario"));
            objUsuario.setSenha(request.getParameter("senha"));
            objUsuario.setIdCooperativaColaborador(idUsuario);
            objUsuario.setTipoUsuario(2); // Dois é colaborador
            
            UsuarioDAO usuario = new UsuarioDAO();
            idUsuario = usuario.cadastrar(objUsuario);
                    
            //ajusta id usario
            objUsuario.setId(idUsuario);
            bean = objUsuario;
            beanColaborador = objColaborador;
            
            request.setAttribute("usuarioBean", objUsuario);
            html = "Sucesso " + request.getParameter("nome");
            
            HttpSession session = request.getSession();
            session.setAttribute("tipoUsuario", 2);
            session.setAttribute("idUsuario", idUsuario);
            session.setAttribute("nomeUsuario", objColaborador.getNome());
            session.setAttribute("bean", bean);
            session.setAttribute("beanColaborador", beanColaborador);
        }
        catch(CooperDAOException e)
        {
            request.setAttribute("UsuarioBean", null);
            html = "Erro: " + e.getMessage();
        }

        //PrintWriter out = response.getWriter(); 
        //out.print(html); 
        //out.close();
        response.sendRedirect("indexprest.jsp?cadastro=ok");
    }

    private void acaoAlterar(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException, CooperDAOException 
    {
        ColaboradorBean objcolaborador = new ColaboradorBean();
        
        objcolaborador.setId(Integer.parseInt(request.getParameter("id")));
        objcolaborador.setNome(request.getParameter("nome"));
        objcolaborador.setProfissao(request.getParameter("profissao"));
        objcolaborador.setRua(request.getParameter("rua"));
        objcolaborador.setNumero(request.getParameter("numero"));
        objcolaborador.setBairro(request.getParameter("bairro"));
        objcolaborador.setCidade(request.getParameter("cidade"));
        objcolaborador.setEstado(request.getParameter("estado"));
        objcolaborador.setEmail(request.getParameter("email"));
        objcolaborador.setTelefone(request.getParameter("telefone"));
        
        
        try {
            ColaboradorDAO entidade = new ColaboradorDAO();
            entidade.alterar(objcolaborador);
            
            //dados usuario
            
            UsuarioBean objusuario = new UsuarioBean();
            objusuario.setId(Integer.parseInt(request.getParameter("idUsuario")));
            objusuario.setSenha(request.getParameter("senha"));
            
            UsuarioDAO usuario = new UsuarioDAO();
            usuario.alterar(objusuario);
            
            HttpSession session = request.getSession();
            //session.setAttribute("bean", objusuario);
            session.setAttribute("nomeUsuario", objcolaborador.getNome());
            request.setAttribute("beanColaborador", objcolaborador);
        }catch(CooperDAOException e){
            request.setAttribute("beanColaborador", null);
        }

        response.sendRedirect("indexprest.jsp");
    }
    
     private void acaoRemover(HttpServletRequest request, HttpServletResponse response)
                        throws ServletException, IOException, CooperDAOException 
    {
        ColaboradorBean objcolaborador = new ColaboradorBean();
        HttpSession session = request.getSession();
        objcolaborador.setId(Integer.parseInt(session.getAttribute("idUsuario").toString()));
        
        try
        {
            ColaboradorDAO entidade = new ColaboradorDAO();
            entidade.remover(objcolaborador);
            request.setAttribute("beanColaborador", objcolaborador);
        } 
        catch(CooperDAOException e)
        {
            request.setAttribute("beanColaborador", null);
        }

        session.removeAttribute("idUsuario");
        session.removeAttribute("bean");
        session.removeAttribute("tipoUsuario");
        // Tem que redirecionar para o view certo
        response.sendRedirect("index.jsp"); 
    }
    
   private void acaoConsultar(HttpServletRequest request, HttpServletResponse response, String nome)
                        throws ServletException, IOException 
    {
        try
        {
            // Não está fazendo paginação
            // Esse é um protótipo
            
            ColaboradorDAO colaborador = new ColaboradorDAO();
            int pagina = 1;
            try{
              pagina = Integer.parseInt(request.getParameter("page"));
            }catch(Exception e){
              pagina = 1;
            }
            ArrayList<ColaboradorBean> novo = colaborador.consultar(nome,pagina-1);
            int total = colaborador.getTotal();
            
            request.setAttribute("total", total);
            request.setAttribute("colaboradorBean", novo);
        }
        catch(Exception sqle)
        {
                request.setAttribute("colaboradorBean", null);
                request.setAttribute("msg", sqle.getMessage());
        }
        
        RequestDispatcher rd = null;
        
        // Tem que redirecionar para o view certo
        rd = request.getRequestDispatcher("/indexcoop.jsp?page=1");
        rd.forward(request,response);
    }
   
   public void init(ServletConfig sc){
     bean = new UsuarioBean();
     beanColaborador = new ColaboradorBean();
     bean.setId(1);
     beanColaborador.setId(1);
   }
   
   public UsuarioBean bean;
   public ColaboradorBean beanColaborador;
}

